package dao;

import mappers.DocumentMapper;
import model.Document;
import org.apache.ibatis.session.SqlSession;
import utils.MyBatisUtil;

import java.util.List;

public class DocumentDAO implements DocumentMapper {
    @Override
    public void insertDocument(Document document) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            documentMapper.insertDocument(document);
            sqlSession.commit();
        }
        finally {
            sqlSession.close();
        }
    }


    @Override
    public Document getDocumentById(int id) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            return documentMapper.getDocumentById(id);
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public List<Document> getDocumentsByPermission(int permission) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            return documentMapper.getDocumentsByPermission(permission);
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public List<Document> getDocumentsByUserId(int id) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            return documentMapper.getDocumentsByUserId(id);
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public void deleteDocumentById(int id) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            documentMapper.deleteDocumentById(id);
            sqlSession.commit();
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public void updateDocument(Document document) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            documentMapper.updateDocument(document);
            sqlSession.commit();
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public List<Document> getAllDocuments() {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            return documentMapper.getAllDocuments();
        }
        finally {
            sqlSession.close();
        }
    }

    @Override
    public int getCountOfDocuments() {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            DocumentMapper documentMapper = sqlSession.getMapper(DocumentMapper.class);
            return documentMapper.getCountOfDocuments();
        }
        finally {
            sqlSession.close();
        }
    }


}
